package EXam.Question11;

import java.util.Arrays;
import java.util.function.Predicate;
import java.util.stream.Stream;

/**
 * 以下是为Java新手设计的AI提示词模板，结合通俗类比、多角度解释和可视化表达，帮助你高效理解编程概念。根据学习场景分为四类，可复制修改后使用：
 *
 * ---
 *
 * ### 🔧 **一、基础概念解析类**（用生活类比降低理解门槛）
 * 1. **抽象概念具象化**
 *    `请用“快递仓库”类比Java集合框架，说明ArrayList、HashMap的区别。要求对比存取速度、内存占用和适用场景，用表格总结`
 *    *输出示例*：ArrayList像编号货架（有序/取件快）；HashMap像智能快递柜（按键取件/无序但快）
 *
 * 2. **技术术语翻译**
 *    `把多线程的synchronized关键字比喻成现实场景，说明其如何解决线程冲突。要求用<100字故事+流程图展示锁机制`
 *    *示例故事*：超市收银台（共享资源）一次只允许一个顾客（线程）结账（加锁）
 *
 * ---
 *
 * ### 🧩 **二、代码调试优化类**（聚焦实际问题解决）
        // 统计三个字的省份的个数
 * 3. **错误分析助手**
 *    `我正在写学生管理系统，遇到NullPointerException报错（附代码片段）。请：
 *    (1) 用新手能懂的语言解释报错原因
 *    (2) 标注可能出错的代码行
        // 统计名字中包含方位名词的省份（东西南北）的个数
 *    (3) 给出三种解决方案并对比优劣`
 *    *关键提示*：强调“对象未初始化就像没插电的电器”
 *
 * 4. **代码重构建议**
 *    `优化这段循环嵌套的排序代码（附代码），要求：
 *    (1) 指出性能瓶颈
 *    (2) 用Stream API重构
 *    (3) 对比重构前后的时间复杂度`
 *    *优化方向*：循环嵌套O(n²) → Stream.filter().sorted()链式调用
 *
 * ---
 *
 * ### 📐 **三、项目实践指导类**（连接理论与实战）
 * 5. **功能实现拆解**
 *    `设计简易图书馆管理系统，请分步骤实现：
 *    [1] Book类的封装（属性私有化）
 *    [2] 用HashMap存储书籍数据（ISBN为Key）
 *    [3] 借书方法（检查库存状态）
 *    [4] 异常处理（自定义“库存不足异常”）`
 *    *技巧提示*：先画UML类图再编码（工具：PlantUML）
 *
 * 6. **技术选型对比**
 *    `学生信息管理系统该用文件存储还是MySQL？请对比：
 *    - 数据量<1000条时的开发效率
 *    - 数据安全性差异
 *    - 扩展性成本（表格呈现）`
 *    *决策建议*：初期用JSON文件快速验证，后期转数据库
 *
 * ---
 *
 * ### 🎨 **四、知识可视化类**（强化记忆理解）
 * 7. **概念关系图谱**
 *    `绘制“Java异常体系”思维导图，要求：
 *    (1) 以Throwable为根
 *    (2) 区分Checked/Unchecked异常
 *    (3) 用⚠️图标标记常见异常（NullPointerException等）`
 *    *记忆点*：Checked异常像必检行李（必须处理），Unchecked像选检
 *
 * 8. **动态原理演示**
 *    `用动画步骤解释JVM内存模型：
 *    (1) 加载Student.class到方法区
 *    (2) new Student()在堆分配内存
 *    (3) 局部变量student在栈帧中引用对象
 *    (4) GC回收无引用对象`
 *    *类比*：方法区=图书馆书架，堆=自习室座位（对象实例），栈=学生证（引用凭证）
 *
 * ---
 *
 * ### 💡 **提示词使用技巧**
 * 1. **追加限定词**：在句尾添加`用初中生能懂的语言`或`避免使用专业术语`
 * 2. **要求分步解释**：对复杂概念追加`请分三个难度层级说明：基础版->进阶版->本质版`
 * 3. **结合生活场景**：技术问题后加`举个点外卖/快递等95后熟悉的例子`
 * 4. **可视化强化**：结尾添加`最后用Mermaid语法绘制关系图`
 *
 * > 这些模板均经过实战测试（基于GPT-4优化），能有效提升AI解释的易懂性。当学习新知识点如`反射机制`时，尝试组合使用：
 * `用“镜子照物体”类比Java反射[类比] → 写个读取类字段的demo[代码] → 画反射调用流程图[可视化]`
 * 遇到卡点随时调整提示词，直到获得你能理解的解释。编程本质是思维训练，持续追问才能突破认知边界 💪
 */
public class ProvinceTest {

    /*1、统计三个字的省份的价数
      2、统计名字中包含方位名词的省份（东西南北）的个数
      3、打印名字中包含方位名词的普通省份（非自治区直辖市特别行政区）的名字
      4、将所有的特殊省份（自治区直辖市特别行政区）提取出来并放到新数组中省份数组如下：
    */
    public static void main(String[] args) {
        String[] provinces = {"河北省", "山西省", "吉林省", "辽宁省",
                "黑龙江省", "陕西省", "甘肃省", "青海省", "山东省", "福建省", "浙江省",
                "台湾省", "河南省", "湖北省", "湖南省", "江西省", "江苏省", "安徽省",
                "广东省", "海南省", "四川省", "贵州省", "云南省", "北京市", "天津市",
                "上海市", "重庆市", "内蒙古自治区", "新疆维吾尔自治区", "宁夏回族自治区",
                "广西壮族自治区", "西藏自治区", "香港特别行政区", "澳门特别行政区"};
        long count=Arrays.stream(provinces)
                .filter(s -> s.length() == 3)
                .count();
        System.out.println("1. 三个字的省份个数: " + count);
        Stream.of(provinces)
                .filter(s->s.contains("东")||s.contains("西")||s.contains("南")||s.contains("北"))
                .filter(s->!s.contains("省"));

    }
}
